## GoodsFactory
## 物品工厂
extends Node


## 物品属性
const GoodsProperty = preload("res://src/scene/inventory/script/GoodsProperty.gd")
## 物品场景文件
const ScnGoods = preload("res://src/scene/inventory/goods.tscn")
## 物品属性列表
const GoodsPropertyList = GoodsProperty.GoodsProperty

# 存放物品图片的文件夹（这里我创建了这些路径）
const GoodsPicturePath = "res://src/scene/inventory/assets/texture/goods/"


## 物品数据
var goods_data = {}


#------------------------------
#  节点带有的方法
#------------------------------
func _ready():
	## 获取物品数据
#	goods_data = FileManager.parse_csv_file("res://src/scene/inventory/data/GoodsData.csv", "Name")
#	print(goods_data)
	pass



#------------------------------
#  自定义方法
#------------------------------
## 返回一个物品
## @goods_name 物品名称
## @return 返回一个物品的节点
func get_goods(goods_name: String):
	if goods_data.has(goods_name):
		var data = get_goods_data(goods_name)	# 物品数据
		var res_property = GoodsProperty.new()
		
		## 设置物品属性资源的属性数据
		res_property.set_property(data)
		
		## 返回物品节点
		var goods = ScnGoods.instance()
		goods.set_goods_property(res_property)	# 设置物品属性
		return goods
	else:
		print_debug("没有【%s】这个物品" % goods_name)
		return null



## 返回物品数据
## --------------
## 做这个方法的原因是因为，数据的属性可能与文件的属性数据不一致的问题
## 我们在这里将数据转为 符合物品属性数据格式 的数据
func get_goods_data(goods_name: String):
	var data = goods_data[goods_name]	# 物品数据
	var temp = {}
	
	# 设置资源的格式：变量[属性名] = 属性值
	temp[GoodsPropertyList.Name] = data['Name']
	temp[GoodsPropertyList.Damage] = int(data['Damage'])
	temp[GoodsPropertyList.MoveSpeed] = int(data['MoveSpeed'])
	temp[GoodsPropertyList.AttackRange] = int(data['AttackRange'])
	temp[GoodsPropertyList.Price] = int(data['Price'])
	temp[GoodsPropertyList.Texture] = get_goods_texture(data['Picture'])
	return temp


## 获取物品图片
## @picture_name 物品图片名称
## @return 返回物品的图片
var file = File.new()
func get_goods_texture(picture_name: String) -> Texture:
	var path = GoodsPicturePath + picture_name + ".png"	# 物品图片路径
	
	# 如果存在图片，则返回图片
	if file.file_exists(path):
		return load(path) as Texture
	# 如果不存在，则返回默认的 icon 图片
	else:
		return preload("res://icon.png")

